package map;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/*
    Map的遍历，支持三种遍历方式：
    1.遍历所有的key
    2.遍历所有的键值对
    3.遍历所有的value（相对不常用）
 */
public class MapDemo2 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("张三",23);
        map.put("李四",24);
        map.put("王五",25);
        map.put("赵六",26);
        map.put("老大",22);
        map.put("老二",22);
        System.out.println(map);    //{老二=22, 老大=21, 王五=25, 李四=24, 赵六=26, 张三=23}
        /*
         遍历所有的key
         Set<K> keySet()
         将当前map中所有的key以一个Set集合的形式返回
         */
        Set<String> keys = map.keySet();
        for(String key : keys) {
            System.out.println("key:"+key);
        }
        System.out.println("----------------");
        /*
         遍历所有的键值对
         Set<Map.Entry> entrySet()
         当前Map中的每一组键值对以一个Entry实例表示。将所有键值对以Set集合返回
         Entry:条目
         */
        Set<Map.Entry<String,Integer>> entries = map.entrySet();
        for(Map.Entry<String,Integer> entry : entries) {    //entry表示每一个键值对
            String key = entry.getKey();        //获取key键
            Integer value = entry.getValue();   //获取value值
            System.out.println("key:"+key+",value:"+value);
        }
        System.out.println("----------------");
        /*
         遍历所有的value
         Collection values()
         将当前map中所有的value以一个Collection集合的形式返回
         */
        Collection<Integer> values = map.values();
        for(Integer value : values) {
            System.out.println("value:"+value);
        }
        System.out.println("----------------");
        /*
         jdk8之后，集合和map提供了forEach方法，基于lambda表达式遍历
         */
        values.forEach(value->System.out.println("value:"+value));
        values.forEach(System.out::println);    //集合forEach()
        System.out.println("----------------");
        map.forEach((k,v)->System.out.println("key:"+k+",value:"+v));   //Map的forEach()
    }
}
/*
keySet      entrySet     values     value.forEach   map.forEach
遍历所有key 遍历所有键值对 遍历所有value   遍历所有value   遍历所有键值对
 */